package com.taotao.rest.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.utils.JsonUtils;
import com.taotao.mapper.TbItemCatMapper;
import com.taotao.pojo.TbItemCat;
import com.taotao.pojo.TbItemCatExample;
import com.taotao.pojo.TbItemCatExample.Criteria;
import com.taotao.rest.dao.JedisClient;
import com.taotao.rest.pojo.CatNode;
import com.taotao.rest.pojo.CatResult;
import com.taotao.rest.service.ItemCatService;

@Service
public class ItemCatServiceImpl implements ItemCatService {

	@Autowired
	private TbItemCatMapper itemCatMapper;
	@Autowired
	private JedisClient jedisClient;
	@Value("${ITEM_CAT_REDIS_KEY}")
	private String ITEM_CAT_REDIS_KEY;

	/**
	 * 获取分类列表
	 */
	public CatResult getItemCatList() {
		// 从缓存中获取类目列表
		try {
			String jsonList = jedisClient.get(ITEM_CAT_REDIS_KEY);
			if (!StringUtils.isBlank(jsonList)) {
				List<CatResult> catResult = JsonUtils.jsonToList(jsonList, CatResult.class);
				return catResult.get(0);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		CatResult catResult = new CatResult();
		catResult.setData(getCatList(0));
		// 写入缓存
		try {
			String jsonList = JsonUtils.objectToJson(catResult);
			jedisClient.set(ITEM_CAT_REDIS_KEY, jsonList);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return catResult;
	}

	/**
	 * 获取商品类目
	 * 
	 * @param parentId
	 * @return
	 */
	private List<?> getCatList(long parentId) {
		// 创建查询条件
		TbItemCatExample example = new TbItemCatExample();
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(parentId);
		// 查询商品类目列表
		List<TbItemCat> list = itemCatMapper.selectByExample(example);

		// 向list添加节点
		List resultList = new ArrayList<>();
		int itemCount = 0; // 类目栏长度容纳14个一级类目
		for (TbItemCat tbItemCat : list) {
			// 判断是否为父节点
			if (tbItemCat.getIsParent()) {
				CatNode catNode = new CatNode();
				if (parentId == 0) { // 第一层要a标签
					catNode.setName(
							"<a href='/products/" + tbItemCat.getId() + ".html'>" + tbItemCat.getName() + "</a>");
				} else {
					catNode.setName(tbItemCat.getName());
				}
				// 此处存疑,url 以.html.html结尾，故注释一个
				catNode.setUrl("/products/" + tbItemCat.getId()/* + ".html" */);
				catNode.setItem(getCatList(tbItemCat.getId())); // 递归
				resultList.add(catNode);

				// 第一级别只取14条记录
				itemCount++;
				if (parentId == 0 && itemCount >= 14) {
					break;
				}
			} else { // 叶子节点
				resultList.add("/products/" + tbItemCat.getId() + /* ".html" + */ "|" + tbItemCat.getName());
			}
		}
		return resultList;
	}

}
